package com.inputabc.ct.v1.handler.impl;

import com.inputabc.ct.v1.handler.ForcedTranslationHandler;
import net.sf.json.regexp.RegexpMatcher;
import net.sf.json.regexp.RegexpUtils;
import org.apache.commons.lang.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 将源内容强制进行翻译的处理器
 *
 * @author gaoweiyi
 * @date 2020-07-13
 * @since v1
 */
public class ForcedTranslationHandlerImpl implements ForcedTranslationHandler {
    @Override
    public boolean judgeCompliance(String format, String content) {
        if (content == null || content.trim().isEmpty()) {
            return false;
        }
        
        if ("xx@xx".equals(format)) {
            return content.matches("([a-zA-Z]+(\\!|\\@|\\#|\\$|\\%|\\^|\\&|\\*|\\_|\\-|\\=|\\+|\\/|\\*|\\~)[a-zA-Z]+)+");
        } else if ("XxXx".equals(format)) {
            return content.matches("([A-Z][a-z]+){2,}");
        }
        // 不符合
        return false;
    }

    @Override
    public String formatContent(String content) {
        if (content == null) return "";
        
        // 基础格式化：清理特殊字符
        String formattedContent = content.trim()
                .replace("\u200B", "") // 零宽空格
                .replace("\u200C", "") // 零宽非连接符
                .replace("\u200D", "") // 零宽连接符
                .replace("\uFEFF", ""); // BOM标记
        
        // 特殊格式处理
        if (judgeCompliance("xx@xx", formattedContent)) {
            // 处理类似camelCase@style的格式
            RegexpMatcher regexpMatcher = RegexpUtils.getMatcher("([a-zA-Z]+(\\!|\\@|\\#|\\$|\\%|\\^|\\&|\\*|\\_|\\-|\\=|\\+|\\/|\\*|\\~)[a-zA-Z]+)+");
            String sep = regexpMatcher.getGroupIfMatches(formattedContent, 2);
            String[] words = formattedContent.split(sep);
            return StringUtils.join(words, " ").toLowerCase();
        } else if (judgeCompliance("XxXx", formattedContent)) {
            // 处理PascalCase格式
            List<String> words = new ArrayList<>();
            Pattern pattern = Pattern.compile("[A-Z][a-z]+");
            Matcher matcher = pattern.matcher(formattedContent);
            while (matcher.find()) {
                String group = matcher.group();
                words.add(group);
            }
            return StringUtils.join(words, " ").toLowerCase();
        }
        
        // 如果存在连续的空格，替换为单个空格
        formattedContent = formattedContent.replaceAll("\\s+", " ");
        
        return formattedContent;
    }
}
